diff --git a/system/libraries/Controller.php b/system/libraries/Controller.php
index 74b233e..9d858e6 100644
--- a/system/libraries/Controller.php
+++ b/system/libraries/Controller.php
@@ -301,9 +301,18 @@
 		
 		}
 		
+		$exceptions = array('dbutil', 'dbexport');
+		
 		foreach ($autoload['libraries'] as $item)
 		{
-			$this->_ci_init_class($item);
+			if ( ! in_array($item, $exceptions))
+			{
+				$this->_ci_init_class($item);
+			}
+			else
+			{
+				$this->_ci_init_dbextra($item);
+			}
 		}
 		unset($autoload['libraries']);
 
@@ -453,6 +462,23 @@
 	// --------------------------------------------------------------------
 
 	/**
+	 * Initialize Database Ancillary Classes
+	 *
+	 * @access	private
+	 * @param	str		class name
+	 * @return	void
+	 */
+	function _ci_init_dbextra($class)
+	{
+		$map = array('dbutil' => 'DB_utility', 'dbexport' => 'DB_export');
+		require_once(BASEPATH.'database/'.$map[$class].EXT);
+		
+		$this->init_class('CI_'.$map[$class], $class);
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
 	 * Returns TRUE if a class is loaded, FALSE if not
 	 *
 	 * @access	public
diff --git a/system/libraries/Loader.php b/system/libraries/Loader.php
index df067cb..90d8240 100644
--- a/system/libraries/Loader.php
+++ b/system/libraries/Loader.php
@@ -51,7 +51,6 @@
 				
 		log_message('debug', "Loader Class Initialized");
 	}
-	// END CI_Loader()
 	
 	// --------------------------------------------------------------------
 	
@@ -75,7 +74,6 @@
 		$obj->_ci_init_class($class, $param);
 		$obj->_ci_assign_to_models();
 	}
-	// END library()
 
 	// --------------------------------------------------------------------
 	
@@ -97,7 +95,6 @@
 		$obj =& get_instance();
 		$obj->_ci_init_model($model, $name, $db_conn);
 	}
-	// END library()
 	
 	// --------------------------------------------------------------------
 	
@@ -124,11 +121,38 @@
 			$obj->_ci_assign_to_models();			
 		}
 	}
-	// END database()
 	
 	// --------------------------------------------------------------------
 	
 	/**
+	 * Database Utiliy Loader
+	 *
+	 * @access	public
+	 * @return	object
+	 */	
+	function dbutil()
+	{
+		$obj =& get_instance();
+		$obj->_ci_init_dbextra('dbutil');
+	}
+	
+	// --------------------------------------------------------------------
+	
+	/**
+	 * Database Export Loader
+	 *
+	 * @access	public
+	 * @return	object
+	 */	
+	function dbexport()
+	{
+		$obj =& get_instance();
+		$obj->_ci_init_dbextra('dbexport');
+	}
+
+	// --------------------------------------------------------------------
+	
+	/**
 	 * Scaffolding Loader
 	 *
 	 * @access	public
@@ -145,7 +169,6 @@
 		$obj =& get_instance();
 		$obj->_ci_init_scaffolding($table);
 	}
-	// END scaffolding()
 	
 	// --------------------------------------------------------------------
 	
@@ -170,7 +193,6 @@
 	{
 		return $this->_ci_load(array('view' => $view, 'vars' => $this->_ci_object_to_array($vars), 'return' => $return));
 	}
-	// END view()
 	
 	// --------------------------------------------------------------------
 	
@@ -188,7 +210,6 @@
 	{
 		return $this->_ci_load(array('path' => $path, 'return' => $return));
 	}
-	// END file()
 	
 	// --------------------------------------------------------------------
 	
@@ -214,7 +235,6 @@
 			}
 		}
 	}
-	// END vars()
 	
 	// --------------------------------------------------------------------
 	
@@ -264,7 +284,6 @@
 		
 		log_message('debug', 'Helpers loaded: '.implode(', ', $helpers));
 	}
-	// END helper()
 	
 	// --------------------------------------------------------------------
 	
@@ -282,7 +301,6 @@
 	{
 		$this->helper($helpers);
 	}
-	// END helpers()
 	
 	// --------------------------------------------------------------------
 	
@@ -332,7 +350,6 @@
 		
 		log_message('debug', 'Plugins loaded: '.implode(', ', $plugins));
 	}
-	// END plugin()
 	
 	// --------------------------------------------------------------------
 	
@@ -377,7 +394,6 @@
 		
 		log_message('debug', 'Scripts loaded: '.implode(', ', $scripts));
 	}
-	// END script()
 	
 	// --------------------------------------------------------------------
 	
@@ -395,7 +411,6 @@
 	{
 		$this->plugin($plugins);
 	}
-	// END plugins()
 	
 	// --------------------------------------------------------------------
 	
@@ -411,7 +426,6 @@
 		$obj =& get_instance();
 		return $obj->lang->load($file, $lang, $return);
 	}
-	// END language()
 	
 	// --------------------------------------------------------------------
 	
@@ -427,7 +441,6 @@
 		$obj =& get_instance();
 		$obj->config->load($file);
 	}
-	// END config()
 	
 	// --------------------------------------------------------------------
 	
@@ -442,7 +455,6 @@
 	{
 		$this->view_path = $path;
 	}
-	// END _ci_set_view_path()
 	
 	// --------------------------------------------------------------------
 	
@@ -553,7 +565,6 @@
 			ob_end_clean();
 		}
 	}
-	// END _load()
 	
 	// --------------------------------------------------------------------
 	
@@ -582,7 +593,6 @@
 			}
 		}
 	}
-	// END _ci_autoloader()
 
 	// --------------------------------------------------------------------
 
@@ -599,7 +609,6 @@
 	{
 		return (is_object($object)) ? get_object_vars($object) : $object;
 	}
-	// END _ci_object_to_array()
 	
 }
 ?>
\ No newline at end of file
